Q5 1から9の整数の組み合わせで、足して10になり、互いに数字が異なる組み合わせ(順番を入れ替えたものを含む)を全て列挙してください。
Q5 1から9の整数の組み合わせで、足して10になり、互いに数字が異なる組み合わせ(順番を入れ替えたものを含む)を全て列挙してください。
初めわからなかったけれど、周りの話し声を聞いて解答方法がわかった
僕の解答 (間違い)
$ seq 4321 | grep -o . | paste - - - - | awk '$1+$2+$3+$4 == 10' | awk '$1 != $2 && $1 != $3 && $1 != $4 && $2 != $3 && $2 != $4 && $3 != $4' | sed "s/\t/ /g" | tr -d "0 " | sort | uniq | sed -E "s/|/ /g"
47個データが存在するので、違う
正解は56個になる
考え方
4321を空白区切りのフィールドに分割
全部のフィールドをそれぞれ比較して、同じ値のものが存在しないか精査
重複業を削除
多分0を消すのと重複業の削除がまずかったのかな・・・
上田先生の解答
$ seq 4321 | grep -v 0 | grep -Ev '(.).*\1' | awk -F '' '{for(i=1;i<=NF-1;i++)$5+=$i;if($5==10)print}' | sed 's/ 10$//'
なるほどなーってなった
grep -Ev '(.).*\1'で同じ値が出現する行を除外する
このやり方は感動した
いつも後方参照はsedで値取り出しするときに使っていた
後方参照の正しい使い方だと思う
awkでフィールドの数だけループして、それぞれの和を求め、求めた我が10のときだけ出力する
-F ""で1文字ずつ出力できる、というのは言われてみれば確かにってなった
が、このときは思いつかなかった
にしても上田先生はawkを使うのが本当に上手だ
僕はawkのフィールドと行の考え方がまだまだ身についていなかった